﻿package fr.babos.test.data
{
	import fr.babos.core.data.collect.IDataCollection;
	import fr.babos.core.data.items.IDataItem;
	import fr.babos.core.data.managers.ADataFilter;
	import fr.babos.core.data.managers.IDataFilter;
	
	/**
	 * @author ZoulouX
	 */
	public class BabosDataFilter extends ADataFilter implements IDataFilter
	{
		/**
		 * L'id de départ
		 */
		protected var _startId		:uint;
		
		/**
		 * L'id de fin
		 */
		protected var _endId		:uint;
		
		
		/**
		 * L'id de départ
		 */
		public function get startId ():uint { return _startId; }
		public function set startId (value:uint):void 
		{
			_startId = value;
		}
		
		/**
		 * L'id de fin
		 */
		public function get endId ():uint { return _endId; }
		public function set endId (value:uint):void 
		{
			_endId = value;
		}
		
		
		/**
		 * Le constructeur
		 * @param	pCollection : La collection à filtrer
		 */
		public function BabosDataFilter (pCollection:IDataCollection)
		{
			// Relayer au parent
			super(pCollection);
		}
		
		/**
		 * Filtrer par id
		 * @return
		 */
		public function filterById (pStartId:uint, pEndId:uint):IDataCollection
		{
			// Enregistrer les paramètres
			_startId = pStartId;
			_endId = pEndId;
			
			// Filtrer
			return filter();
		}
		
		/**
		 * Méthode de filtre concrête.
		 * @param	pElement : L'élément à filtrer
		 * @param	pIndex : Son index
		 * @return : true s'il doit être gardé
		 */
		override protected function filterElement (pElement:IDataItem, pIndex:uint):Boolean
		{
			// Cibler l'élément avec le bon typage
			var babosItem:BabosDataTestItem = (pElement as BabosDataTestItem);
			
			// Effectuer le filtrage
			return (babosItem.id >= _startId && babosItem.id <= _endId)
		}
	}
}